package jp.ykmjuku.translatesample;
/***
 * Copyright (c) 2010-2012 Re:Kayo-System, Ltd. All rights reserved.
 *
 *  This program is free software; you can redistribute it and/or modify it under
 *  the terms of the GNU General Public License as published by the Free Software
 *  Foundation; either version 2 of the License, or (at your option) any later
 *  version.
 *
 *  This program is distributed in the hope that it will be useful, but WITHOUT
 *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 *  FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
 *  details.
 *
 *  You should have received a copy of the GNU General Public License along with
 *  this program; if not, write to the Free Software Foundation, Inc., 59 Temple
 *  Place, Suite 330, Boston, MA 02111-1307 USA
 *
 */

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import com.google.api.translate.Language;
import com.google.api.translate.Translate;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

/***
 * 
 * @author yokmama
 *
 */
public class MainActivity extends Activity {
    
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        Intent intent = getIntent();
        if(intent!=null && "com.adamrocker.android.simeji.ACTION_INTERCEPT".equals(intent.getAction())){
            //マッシュルーム処理
            String text = intent.getStringExtra("replace_key");
            if(text!=null){
                Intent data = new Intent();
                data.putExtra("replace_key", translate2(text));
                setResult(RESULT_OK, data);
                finish();
                return;
            }
        }
        //マッシュルームじゃない場合は以下の処理が実行される
        Button btn = (Button)findViewById(R.id.button1);
        btn.setOnClickListener(new OnClickListener() {
            
            public void onClick(View v) {
                EditText edit1 = (EditText)findViewById(R.id.editText1);
                EditText edit2 = (EditText)findViewById(R.id.editText2);
                if(edit1.getText().length()>0){
                    edit2.setText(translate2(edit1.getText().toString()));
                }
            }
        });
    }
    
    /***
     * 本メソッドを使用する場合は、別途GoogleAPIキーを取得してください。
     * https://code.google.com/apis/console/
     * 
     * Gogole翻訳サービスをもちいて、日本語を英語に翻訳してくれます。
     * 翻訳を変更したい場合は引数の　sourceの値とtargetの値を変更してください
     * 
     * @param str
     * @return
     */
    private String translate(String str){

        BufferedReader in = null;
        try{
            //Google翻訳へのURLとそのパラメータを設定したURL文字列を生成
            StringBuilder sb = new StringBuilder();
            sb.append("https://www.googleapis.com/language/translate/v2");
            sb.append("?key=<Your API Key>");
            sb.append("&q=").append(URLEncoder.encode(str, "UTF-8"));
            sb.append("&source=ja&target=en");
            
            //URLをオープンする
            URL url = new URL(sb.toString());
            URLConnection con = url.openConnection();

            //HTTPから取得されるストリームを生成
            in = new BufferedReader(new InputStreamReader(con.getInputStream(),
                    "UTF-8"));

            //ストリームから取得できるデータを文字列にする
            StringBuffer json = new StringBuffer();
            String line = null;
            while ((line = in.readLine()) != null) {
                json.append(line);
            }
            
            //文字列はJSON形式のデータであるため、JSONObjectに設定しデータにアクセスする
            JSONObject root = new JSONObject(json.toString());
            JSONObject data = root.getJSONObject("data");
            JSONArray translations = data.getJSONArray("translations");
            if(translations!=null && translations.length()>0 ){
                //translatedTextに変換された文字列が設定されている
                String text = translations.getJSONObject(0).getString("translatedText");
                return text;
            }
        } catch (JSONException e) {
            Log.e("TranslateMash", "translate", e);
        } catch (IOException e) {
            Log.e("TranslateMash", "translate", e);
        }
        finally{
            if(in!=null){
                try {
                    in.close();
                } catch (IOException e) {}
            }
        }
        
        return "";
    }
    
    /***
     * 本メソッドはGoogleTranslateAPIを用いて処理をしていますが、すでにこのAPIは使用禁止になっています。
     * 本サンプルでは、GoogleのAPIキーを取得していない場合でも処理できるようにしているため、こちらのメソッドを使用しています。
     * 
     * @deprecated
     * @param str
     * @return
     */
    private String translate2(String str) {
        String url="http://code.google.com/p/google-api-translate-java/";
        Translate.setHttpReferrer(url);
        try{
            //第１引数　翻訳したい文字列
            //第２引数　翻訳元の言語
            //第３引数　翻訳先の言語　
            String translatedText = Translate.execute(str, Language.JAPANESE, Language.ENGLISH);
            return translatedText;
        }
        catch(Exception e){
            Log.e("TranslateMash", "translate2", e);
        }
        return "";
    }
}